#include "pagethree.h"
#include "ui_pagethree.h"

#include <QDateTime>

pagethree::pagethree(QWidget *parent):
    QWidget(parent),
    ui(new Ui::pagethree),
    timeCounter(0),
    maxHumid(60),
    minHumid(30)
{
    ui->setupUi(this);
    tempSeries = new QLineSeries();
    tempSeries->setName("湿度 (%)");  // 系列名称（用于图例）

    // 2. 创建图表并添加数据序列
    chart = new QChart();
    chart->addSeries(tempSeries);
    chart->setTitle("湿度变化折线图");  // 图表标题
    chart->legend()->setVisible(true);  // 显示图例

    // 3. 配置X轴（时间轴，单位：秒）
    axisX = new QValueAxis();
    axisX->setTitleText("时间 (s)");    // X轴标题
    axisX->setRange(0, 30);    // 初始显示0-30秒的数据
    axisX->setTickCount(10);
    chart->addAxis(axisX, Qt::AlignBottom);  // X轴在底部
    tempSeries->attachAxis(axisX);      // 将数据序列关联到X轴

    // 4. 配置Y轴（湿度轴，适合室内湿度）
    axisY = new QValueAxis();
    axisY->setTitleText("湿度 ");   // Y轴标题
    axisY->setRange(0, 100);           // 湿度范围
    axisY->setTickCount(10);            // 刻度数量
    chart->addAxis(axisY, Qt::AlignLeft);   // Y轴在左侧
    tempSeries->attachAxis(axisY);      // 将数据序列关联到Y轴

    // 5. 创建图表视图（用于显示图表）
    QChartView *chartView = new QChartView(chart, this);
    chartView->setRenderHint(QPainter::Antialiasing);  // 抗锯齿，使图表更清晰
    chartView->setGeometry(200, 0, 600, 400);  // 设置图表位置和大小（x,y,w,h）

    // 6. 初始化定时器（仅用于接收真实数据）
    dataTimer = new QTimer(this);
    connect(dataTimer, &QTimer::timeout, this, &pagethree::updateData);
    // 不自动启动定时器，等待真实数据
    onHumidThresholdUpdated(maxHumid, minHumid);
}

pagethree::~pagethree()
{
    delete ui;
    delete tempSeries;
    delete chart;
    delete axisX;
    delete axisY;
    delete dataTimer;
}
// 1. 实现接收湿度的槽函数
void pagethree::onHumidityReceived(double humid)
{
    // 添加新数据点（时间计数器，接收的湿度）
    tempSeries->append(timeCounter, humid);

    // 保持X轴只显示最近30秒的数据（原有逻辑）
    if (timeCounter > 30) {
        axisX->setRange(timeCounter - 30, timeCounter);
        onHumidThresholdUpdated(maxHumid, minHumid);
    }

    timeCounter++; // 时间递增
}
void pagethree::updateData()
{
    // 此函数现在仅用于处理真实传感器数据
    // 不再生成模拟数据
}



// 处理接收的湿度阈值
void pagethree::onHumidThresholdUpdated(int max, int min)
{
    maxHumid = max;
    minHumid = min;
    QList<QAbstractSeries*> seriesList = chart->series();
    for (auto series : seriesList) {
        if (series->name() == "最高湿度阈值" || series->name() == "最低湿度阈值") {
            chart->removeSeries(series);
            delete series; // 释放内存
        }
    }

    // 2. 添加最高湿度阈值线
    QLineSeries *maxLine = new QLineSeries();
    maxLine->setName("最高湿度阈值");
    // 从当前X轴范围的最小值到最大值绘制水平线
    maxLine->append(axisX->min(), maxHumid);
    maxLine->append(axisX->max(), maxHumid);
    maxLine->setColor(Qt::red); // 红色标记最高阈值
    maxLine->setPen(QPen(Qt::red, 2, Qt::DashLine)); // 虚线样式
    chart->addSeries(maxLine);
    // 关联到坐标轴
    maxLine->attachAxis(axisX);
    maxLine->attachAxis(axisY);

    // 3. 添加最低湿度阈值线
    QLineSeries *minLine = new QLineSeries();
    minLine->setName("最低湿度阈值");
    // 从当前X轴范围的最小值到最大值绘制水平线
    minLine->append(axisX->min(), minHumid);
    minLine->append(axisX->max(), minHumid);
    minLine->setColor(Qt::blue); // 蓝色标记最低阈值
    minLine->setPen(QPen(Qt::blue, 2, Qt::DashLine)); // 虚线样式
    chart->addSeries(minLine);
    // 关联到坐标轴
    minLine->attachAxis(axisX);
    minLine->attachAxis(axisY);
}
